Rychlost pripojeni na Firebird pres Interbase
Otázka od: Radim Hradecky
2. 9. 2004 15:03
Dobry den,
Mam problem s pripojenim na Firebird pomoci Interbase. Pripojuji
se do lokalni database a delam SELECT v zhruba 17000 zaznamech (je to jen
SUM trzby ve dni nic vic). Techto SELECTu delam cca 30 (sou to dny mesici).
Problem je v tom ze vykonani kazdeho dotazu trva zhruba 350ms, coz dava v
souctu nepeknou cifru (9 sekund na cely mesic). Prochazel sem diskuzi, ale s
timto problemem sem se nesetkal. Priznam se ze vaham zda se mam snazit o
nejakou optimalizaci tech dotazu a snizit jejich pocet nebo nejakym zpusobem
urychlit to pripojeni (jine komponenty, nejaka jina optimalizce). S
Firebirdem pracuji v Delphi poprve a tak nevim co od toho mam ceka ohledne
rychlosti
Diky za odpovedi
Odpovedá: Slavomir Skopalik
2. 9. 2004 15:50
Hlavni problem je, ze jsi skoro nic nenapsal.
1. Interbase se neumi pripojit na FB, ale predpokladam, ze jsi asi
myslel IBX.
2. Na www.dbsvet.cz mi vysli nejake clanky o optimalizaci FB, mrkni se
na to
3. Lepe popis tabulku, co sumujes a za jake podminky
Dale pak jakou verzi FB pouzivas ? Doporucuji 1.5.1.
Slavek
> Mam problem s pripojenim na Firebird pomoci
> Interbase. Pripojuji se do lokalni database a delam SELECT v
> zhruba 17000 zaznamech (je to jen SUM trzby ve dni nic vic).
> Techto SELECTu delam cca 30 (sou to dny mesici). Problem je v
> tom ze vykonani kazdeho dotazu trva zhruba 350ms, coz dava v
> souctu nepeknou cifru (9 sekund na cely mesic). Prochazel sem
> diskuzi, ale s timto problemem sem se nesetkal. Priznam se ze
> vaham zda se mam snazit o nejakou optimalizaci tech dotazu a
> snizit jejich pocet nebo nejakym zpusobem urychlit to
> pripojeni (jine komponenty, nejaka jina optimalizce). S
> Firebirdem pracuji v Delphi poprve a tak nevim co od toho mam
> ceka ohledne rychlosti
Odpovedá: Radim Hradecky
2. 9. 2004 17:32
Ok zkusim to napravit
1. Ano myslel sem IBX
2. Koukal jsem na to, ale musim se smutne priznat, ze o PLAN slysim poprve.
Trosku se prostouram v napovede, abych to trosku pochopil.
3. Je to tabulka "trzba" do niz se ukladaji jednotlive platby takze tam je
ID platby(auto increment,primery key), Nazev, Cena.
Takze ve vysledku volam toho (toto je volani souctu trzby v mesici):
SELECT SUM("Cena") FROM "trzba" WHERE ("Datum">='2004-01-01 00:00:00' AND
"Datum"<='2004-01-31 23:59:59')
Na kazdy mesic je to v prumeru 3000 zaznamu.
Pouzivam FB 1.5.1 dialect 3
Doufam ze uz jsem to poznal spravne, toto byl muj prvni prispevek do teto
diskuze
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Slavomir Skopalik
Sent: Thursday, September 02, 2004 4:33 PM
To: delphi-l@clexpert.cz
Subject: Re: Rychlost pripojeni na Firebird pres Interbase
Hlavni problem je, ze jsi skoro nic nenapsal.
1. Interbase se neumi pripojit na FB, ale predpokladam, ze jsi asi
myslel IBX.
2. Na www.dbsvet.cz mi vysli nejake clanky o optimalizaci FB, mrkni se
na to
3. Lepe popis tabulku, co sumujes a za jake podminky
Dale pak jakou verzi FB pouzivas ? Doporucuji 1.5.1.
Slavek
> Mam problem s pripojenim na Firebird pomoci
> Interbase. Pripojuji se do lokalni database a delam SELECT v
> zhruba 17000 zaznamech (je to jen SUM trzby ve dni nic vic).
> Techto SELECTu delam cca 30 (sou to dny mesici). Problem je v
> tom ze vykonani kazdeho dotazu trva zhruba 350ms, coz dava v
> souctu nepeknou cifru (9 sekund na cely mesic). Prochazel sem
> diskuzi, ale s timto problemem sem se nesetkal. Priznam se ze
> vaham zda se mam snazit o nejakou optimalizaci tech dotazu a
> snizit jejich pocet nebo nejakym zpusobem urychlit to
> pripojeni (jine komponenty, nejaka jina optimalizce). S
> Firebirdem pracuji v Delphi poprve a tak nevim co od toho mam
> ceka ohledne rychlosti
Odpovedá: Slavomir Skopalik
2. 9. 2004 19:09
> Takze ve vysledku volam toho (toto je volani souctu trzby v
> mesici): SELECT SUM("Cena") FROM "trzba" WHERE
> ("Datum">='2004-01-01 00:00:00' AND "Datum"<='2004-01-31
> 23:59:59') Na
kazdy mesic je to v prumeru 3000 zaznamu.
> Pouzivam FB 1.5.1 dialect 3
Hmm, co takle lepe popsat tu tabulku, nazev opravdu nic neresi.
Dale predpokladam, ze mas nad polem DATUM index.
a jeste bych ocekaval, ze prilozis PLAN dotazu a statistiku.
V wisql se zaskrtne volba Display Query Plan (to je udelatko
co pouzivam ja, co bylo ke kazde interbase).
Jinak ten dotaz je chybne, spravne by mel byt:
SELECT SUM("Cena") FROM "trzba" WHERE
"Datum">='2004-01-01 00:00:00' AND "Datum"< '2004-02-01 00:00:00'
Ale chyba to byla jen kosmeticka.
Slavek
Odpovedá: Radim Hradecky
2. 9. 2004 20:53
Takze popis tabulky:
TABLE "trzba"
ID: integer, primary key, auto-increment
Sluzba: varchar(50)
Cena: float
Datum: Timestamp
SQL Dotaz:
SELECT SUM("Cena") FROM "trzba" WHERE
"Datum">='2004-01-01 00:00:00' AND "Datum"< '2004-02-01 00:00:00'
Jako plan mi to vyhodilo toto:
PLAN (trzba NATURAL):
PLAN (trzba NATURAL)
Adapted plan:
PLAN (trzba NATURAL)
Jinak jako statistiku mam v EMS Manageru toto (doufam ze to bude stacit):
------------------------------------------------
Prepare : 0
Execute : 234
Avg fetch time: 234,00 ms
Memory
------------------------------------------------
Current: 9?322?496
Max : 9?467?992
Buffers: 2?048
Operations
------------------------------------------------
Read : 0
Writes : 4
Fetches: 32?030
Plan:
------------------------------------------------
PLAN (trzba NATURAL)
Enchanced Info:
+--------------------------+-------+-----------+---------+---------+--------
--+
| Table Name | Index | Non-Index | Updated | Deleted |
Inserted |
| | reads | reads | | |
|
+--------------------------+-------+-----------+---------+---------+--------
--+
| RDB$FIELDS| 15 | 0 | 0 | 0 |
0 |
| RDB$INDEX_SEGMENTS| 1 | 0 | 0 | 0 |
0 |
| RDB$RELATION_FIELDS| 15 | 0 | 0 | 0 |
0 |
| RDB$RELATIONS| 2 | 0 | 0 | 0 |
0 |
| RDB$RELATION_CONSTRAINTS| 1 | 0 | 0 | 0 |
0 |
| trzba| 0 | 15?456 | 0 | 0 |
0 |
+--------------------------+-------+-----------+---------+---------+--------
--+
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Slavomir Skopalik
Sent: Thursday, September 02, 2004 8:09 PM
To: delphi-l@clexpert.cz
Subject: Re: Rychlost pripojeni na Firebird pres Interbase
> Takze ve vysledku volam toho (toto je volani souctu trzby v
> mesici): SELECT SUM("Cena") FROM "trzba" WHERE
> ("Datum">='2004-01-01 00:00:00' AND "Datum"<='2004-01-31
> 23:59:59') Na
kazdy mesic je to v prumeru 3000 zaznamu.
> Pouzivam FB 1.5.1 dialect 3
Hmm, co takle lepe popsat tu tabulku, nazev opravdu nic neresi.
Dale predpokladam, ze mas nad polem DATUM index.
a jeste bych ocekaval, ze prilozis PLAN dotazu a statistiku.
V wisql se zaskrtne volba Display Query Plan (to je udelatko
co pouzivam ja, co bylo ke kazde interbase).
Jinak ten dotaz je chybne, spravne by mel byt:
SELECT SUM("Cena") FROM "trzba" WHERE
"Datum">='2004-01-01 00:00:00' AND "Datum"< '2004-02-01 00:00:00'
Ale chyba to byla jen kosmeticka.
Slavek
Odpovedá: Slavomir Skopalik
2. 9. 2004 22:55
> Takze popis tabulky:
> TABLE "trzba"
> ID: integer, primary key, auto-increment
> Sluzba: varchar(50)
> Cena: float
> Datum: Timestamp
>
> SQL Dotaz:
> SELECT SUM("Cena") FROM "trzba" WHERE
> "Datum">='2004-01-01 00:00:00' AND "Datum"< '2004-02-01 00:00:00'
>
> Jako plan mi to vyhodilo toto:
> PLAN (trzba NATURAL):
> PLAN (trzba NATURAL)
Takze je to jasny, chybi ti index nad polem Datum .
Takze nadefinuj index a bude mnohem rychlejsi .
Slavek
Odpovedá: Radim Hradecky
3. 9. 2004 9:48
Zabralo to.16 ms na jeden dotaz
Diky moc za pomoc
PS: A diky za trpelivost
-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Slavomir Skopalik
Sent: Thursday, September 02, 2004 11:55 PM
To: delphi-l@clexpert.cz
Subject: Re: Rychlost pripojeni na Firebird pres Interbase
> Takze popis tabulky:
> TABLE "trzba"
> ID: integer, primary key, auto-increment
> Sluzba: varchar(50)
> Cena: float
> Datum: Timestamp
>
> SQL Dotaz:
> SELECT SUM("Cena") FROM "trzba" WHERE
> "Datum">='2004-01-01 00:00:00' AND "Datum"< '2004-02-01 00:00:00'
>
> Jako plan mi to vyhodilo toto:
> PLAN (trzba NATURAL):
> PLAN (trzba NATURAL)
Takze je to jasny, chybi ti index nad polem Datum .
Takze nadefinuj index a bude mnohem rychlejsi .
Slavek